iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Software Development

軟體架構備忘錄系列 第 8

Day 8 系統架構 - 執行環境 (知識點034~041)

  • 分享至 

  • xImage
  •  

在架構設計時,第一個通常需要決定的就是應用程式的執行環境。除了傳統在伺服器直接安裝作業系統與應用程式外。
現在還有很多其他的選擇,包含:VM、Docker、Kubernetes、IaaS、PaaS、FaaS
本文一併介紹常與其他雲端服務形式混淆的SaaS。


伺服器直接安裝

概述

在伺服器上直接安裝作業系統與應用程式

優點

  • 架設容易:直接進行安裝最為簡單與快速
  • 速度最快:由於不含任何抽象層,直接安裝作業系統與應用程式。因此執行效能最佳。
  • 管理單純:無需考慮其他抽象層的管理、錯誤排除

缺點

  • 難以擴增:若要提升服務能力,只能垂直伸縮,例如:安裝更快的CPU或是更多的記憶體。
  • 難以還原:若發生伺服器發生故障時,只能選擇重新安裝。
  • 備份不易:無內建備份功能,需要建置額外功能以進行資料備份
  • 更新困難:由於各作業系統版本差異大,更新較為困難

VM

概述

VM (Virtual Machine) 是在一台實體機器中分割多個獨立的虛擬機器,每一個VM可設置可使用的運算資源與記憶體資源量。在每一個VM中,安裝獨立的作業系統與應用程式。這種模式可以提供多個不互相干擾的軟體運作環境,以滿足多個不同的使用需求。

使用情境

  • 獨立環境:有一台較大的伺服器,且同時有多個希望獨立運作的中小型運算需求。
  • 移植雲端:預計將地端環境移植到雲端,但是舊有架構尚無法容器化或需安裝其他無法容器化套裝軟體。
  • 垂直伸縮:希望可以依照使用需求,動態調整作業環境的運算資源量。
  • 水平伸縮:透過VM的映象檔機制,可以快速部屬到其他機器
  • 系統還原:透過VM的映象檔機制快速進行系統還原。

缺點

  • 資源使用量大:相較於輕量化的容器管理技術,每一個VM都需要安裝作業系統,因此需要使用較多系統資源
  • 啟動速度慢:每一個VM都有獨立的作業系統,因此載入速度較慢
  • 費用高昂:需要採購額外的VM管理系統才能使用完整VM機制,這往往需要高額的授權費用。
  • 水平擴展不易:VM的擴展相對較困難,特別是在需要大規模部署和管理多個VM的情境下。每一台VM的設定、網路配置等屬性都需要進行調整,這可能需要額外的時間和工作量。

Docker

概述

容器化技術的代表性產品,在同一作業系統中分隔獨立的軟體運作環境。

情境

  • 開發與測試:在開發與測試階段,使用Docker可以少量系統資源提供與正式環境一致的測試環境。
  • 直接使用已封裝的應用程式映像檔:Docker生態系統可找到許多可直接使用的各式應用程式映象檔,節省在不同環境建置、設定應用程式的時間。
  • 隔離多個應用程式環境:在同一伺服器中,分隔多個容器,以避免不同應用程式的版本與設定衝突或是使用時影響其他應用程式
  • 快速部屬:Docker的輕量化特性,適合快速在多台伺服器部屬應用程式
  • 微服務架構:Docker本身的隔離特性適合與微服務進行結合,微服務將應用程式拆為多個小程式,搭配使用Docker可快速、有彈性的依使用需求動態調整各微服務的容器數量。
  • 雲原生程式:由於雲端以系統資源使用量為計價、以及可快速依需求提供多台運算資源。所以Docker的輕量化與快速部屬特性極適合雲端環境。

優點

  • 輕量化:由於容器內不包含作業系統,可以因此快速啟動,並且使用較少系統資源。
  • 隔離性:各個容器獨立執行,避免應用程式的衝突。並且在任一容器錯誤時,可獨立重啟而不影響其他現有容器。
  • 安全性:以容器隔離不同的應用程式,可增加安全性。
  • 還原性:可監控容器的狀態並自動重啟。
  • 管理機制豐富:內建多種管理容器的機制,例如:資源監控、錯誤偵測、自動重啟等。
  • 避免作業系統產生的衝突:由於在作業系統上再封裝一個抽象層,因此可解決在傳統不同版本作業系統差異而造成的管理困難。
  • 隨時啟用:由於具有獨立的運作環境,不受不同作業系統版本的差異影響。可直接載入並啟用開發商或社群所提供的映象檔。
  • 水平伸縮:易於部屬與擴展,可快速新增或移除容器,以應對流量變化。
  • CICD機制:將Dockerfile等建置映像檔所需的資料放入版本庫中之後,可自動產生、驗證、部屬映像檔。
  • 提供IaC機制:由於Dockerfile中記載完整的容器建置過程,因此具有IaC的相關優點,例如方便追蹤容器建置的細節差異。
  • 版本控制與快速回滾:可同時有新舊版本的映像檔,方便在錯誤時快速切換版本。

缺點

  • 安全性:預設以Root身分啟動容器,這會造成潛在的風險。可以改成以其他身分啟動容器,但是實作上較複雜。
  • 學習門檻:Docker的容器化機制有其複雜度,需要較長的學習期間,以理解其資料持久化、網路配置、自動重啟等機制。

Kubernetes

概述

Kubernetes是一個大規模部屬與容器編排的工具。

主要功能如下:

  • 容器編排:將功能相關的容器組成pod,pod裡面可以有獨立的子網路等設定
  • 容器部屬:依照伺服器負載數值或排程,進行自動化容器部屬。當伺服器無法容納更多容器時,將自動啟動更多伺服器。
  • 高可用性:當容器或伺服器錯誤時,自動替換失敗的容器或伺服器
  • 網路管理:替各容器分配獨立的IP位置及網路區隔。
  • 服務發現:由於同一容器分布於多台伺服器中,以負載均衡模式將流量到合適的容器。
  • 部屬管理:與CICD結合,可用各種方式進行部屬管理與測試,例如:灰度部屬或A/B測試

使用情境

  • 可在多達上萬台分布式環境中管理容器服務
  • 多區域與混合雲中管理容器服務

缺點

  • 設定複雜:由於管理上萬台伺服器的複雜性,其網路與容器相關設定較為複雜
  • 學習曲線高:由於有許多抽象的概念,例如pod, service, ingress,而且有許多不同的設定會影響容器集群,因此需要較長的時間進行學習。
  • 資源消耗:由於需要監控、管理容器,因此需要耗費較多系統資源。

IaaS

描述

  • IaaS (Infrastructure as a Service,基礎設施即服務) 是一種雲端服務的類型,雲端供應商負責提供基礎設施,使用者需要自行管理作業系統及相關軟體執行環境。本質上IaaS是由雲端供應商提供VM供客戶使用。因此相關使用情境與優缺點與VM類似。

使用情境

  • 完全控制:需要完全控制作業系統的運作細節
  • 安裝軟體:需要在雲端上按照自己的需求安裝特殊工具或軟體。
  • 垂直伸縮:希望可以依照使用需求,動態調整作業環境的運算資源量。
  • 水平伸縮:透過VM的映象檔機制,可以快速部屬到其他機器
  • 系統還原:透過VM的映象檔機制快速進行系統還原。

缺點

  • 需自行管理作業系統:由於雲端供應商提供的是VM,因此作業系統的設定與更新須由客戶自行負責
  • 啟動速度慢:每一個VM都有獨立的作業系統,因此載入速度較慢
  • 資源使用量大:相較於輕量化的容器管理技術,每一個VM都需要安裝作業系統,因此需要使用較多系統資源

PaaS

描述

  • PaaS (Platform as a Service,平台即服務) 是一種雲端服務的類型,雲端供應商負責管理作業系統並提供應用程式運作平台。使用者只需要管理應用程式即可。

案例

  • Web App:提供各種語言的網路應用程式的運作環境,例如Java、Python、Golang、Node.js
  • 容器運行平台:提供Docker、Kubernates等工具的運作平台
  • 資料庫:可直接連線的資料庫環境,並支援多實例資料庫、備份、還原等功能。

優點

  • 無須管理作業系統:只需要專注在使用的應用程式平台上
  • 快速伸縮:PaaS環境本身通常已規劃水平伸縮的機制
  • 監控與管理:PaaS環境提供Log紀錄、監控、自動警報等管理機制

FaaS

概述

FaaS(Function as a Service: 函數即服務,又稱為Serverless Function) ,是一種雲端服務的類型,概念為讓軟體開發人員只需專注於實作程式邏輯,而不須煩惱程式平台與系統管理議題。

使用情境

  • Web API
  • 批次處理
  • 排程作業
  • 事件驅動
  • 前後端分離的後端伺服器

優點

  • 彈性: 使用時才須付費
  • 伸縮性: 雲端平台將會按照使用量,自動擴展
  • 無須管理架構: 不像IaaS、FaaS等模式還需要管理基礎架構或平台設定
  • 以一般語言實作邏輯: 未來若服務使用量較大,可將同樣邏輯經過一些調整後搬到Container等環境。

缺點

  • 載入需時間: 每次服務執行前,都需要先載入邏輯,因此服務回應速度較慢。雖然可以某些平台可提供預先載入,但是其收費就會較高。
  • 由於大多FaaS服務都是在外部網路的雲端雲端服務,與內部網路的服務相比,需要考慮更多安全性的議題。

SaaS

描述

SaaS (Software as a Service,軟體即服務) 是一種雲端服務的類型,雲端供應商管理整個應用程式,客戶只需要直接使用應用程式即可。雖然SaaS常與IaaS、PaaS、FaaS共同排列,但嚴格來說,它不算是可以供架構設計時選擇的程式運作環境。SaaS通常是提供一個可以直接使用的應用程式。若非要在上面執行自定義的程式,而是SaaS所提供的服務。使用SaaS可簡化安裝、管理應用程式的時間。

案例

  • Gmail:提供Email服務
  • M365:提供Office軟體服務
  • CRM:提供客戶管理系統
  • HRM:提供人資管理系統
  • Camunda:提供BPM (Business Process Management)流程管理服務

上一篇
Day 7 資訊安全 - 授權 (知識點029~033)
下一篇
Day 9 系統架構 - 應用程式介面 (知識點042~046)
系列文
軟體架構備忘錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言